#include <stdio.h>

#define MAXLEN 10

int mystrlen(const char* s)
{
	int i = 0;

	while (s[i]) {
		i++;
	}

	return i;
}

void strinput(char* s)
{
	int i = 0;

	do {
		scanf("%c", &s[i]);
		i++;
	} while (s[i - 1] != '\n' && i < MAXLEN - 1);

	if (i == MAXLEN - 1) { // 已到末尾，放置'\0'
		s[i] = '\0';
	} else { // 把读入的'\n'替换成'\0'
		s[i - 1] = '\0';
	}
}

char* mystrncpy(char* dst, const char* src, int n)
{
	int i = 0;

	do {
		dst[i] = src[i];
		i++;
	} while (src[i - 1] && i < MAXLEN - 1 && i < n);

	if (i == MAXLEN - 1 || i == n) {
		dst[i] = '\0';
	} else {
		dst[i - 1] = '\0';
	}

	return dst;
}

char* mystrncat(char* dst, const char* src, int n)
{
	int i, l;

	i = l = mystrlen(dst); // 从目标字符串的'\0'字符位置开始

	do {
		dst[i] = src[i - l];
		i++;
	} while (src[i - l - 1] && i < MAXLEN - 1 && i - l < n);

	if (i == MAXLEN - 1 || i - l == n) {
		dst[i] = '\0';
	} else {
		dst[i - 1] = '\0'; 
	}

	return dst;
}

int main(void)
{
	char a[MAXLEN];
	char b[MAXLEN];
	char c[100] = "Hello, world!";

	// 输入字符串
	strinput(a);
	strinput(b);
	
	printf("输入的字符串：\n\"%s\"\n\"%s\"\n", a, b);
	printf("长度分别为%d %d\n", mystrlen(a), mystrlen(b));

	printf("复制后字符串为\"%s\"\n", mystrncpy(a, b, 5));

	printf("拼接后字符串为\"%s\"\n", mystrncat(a, c, 3));

	return 0;
}
